package com.summer.data.jql.concept.exp.filter_in;

import com.summer.data.Jsql;
import com.summer.data.dialect.Dialect;
import com.summer.data.jql.Context;
import com.summer.data.jql.behavior.FilterAble;
import com.summer.data.table.BaseColumn;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 345480567@qq.com
 */
public class ColumnInValuesExp<T> implements FilterAble {

    BaseColumn<T> column;

    private List<T> valueList = new ArrayList<>();

    public ColumnInValuesExp(BaseColumn<T> column, T... values) {
        this.column = column;
        for (T t : values) {
            valueList.add(t);
        }
    }

    @Override
    public Jsql toFilterJsql(Context ctx, Dialect dialect) {
        assert valueList.size() > 0;
        Jsql valueJsql = new Jsql();
        for (int i=0; i<valueList.size(); i++) {
            if (i != 0) {
                valueJsql.append(", ");
            }
            T t = valueList.get(i);
            if (t instanceof String) {
                valueJsql.append("'?'");
            } else {
                valueJsql.append("?");
            }
            valueJsql.appendParameters(t);
        }
        Jsql jsql = Jsql.format(" %s IN (%s) ", column.toFieldSql(ctx, dialect), valueJsql);
        return jsql;
    }
}

